/*pub-2016-1-11*/
KSLITE.declare("tkapi-plugin", ["tkapi-util", "tkapi-config", "tkapi-replacebox"],
function(a, b) {
    var c, d = KSLITE,
    e = (a("tkapi-config"), a("tkapi-util")),
    f = a("tkapi-replacebox"),
    g = {};
    g.tklink = function(a, b, e) {
        if (!d.iPO(b)) return null;
        var f, g = document.createElement("a");
        b.tc = this.getPluginName(),
        g.href = b.href,
        g.appendChild(document.createTextNode(a));
        for (f in b) b.hasOwnProperty(f) && "href" != f && g.setAttribute("data-" + f, b[f]);
        return e ? (c || (c = document.createElement("div")), c.innerHTML = "", c.appendChild(g), c.innerHTML) : g
    },
    g.showReplaceBox = f.show;
    var h;
    g.getElementsFor = function(a) {
        var b = {};
        h = h || document.getElementsByTagName("*");
        for (var c, d = 0; d < h.length; d++) c = h[d].getAttribute("data-plugin"),
        c && (c.indexOf(",") && (c = c.split(",")[0]), b[c] || (b[c] = []), b[c].push(h[d]));
        return b[a] || []
    },
    g.util = e;
    var i = {},
    j = function(a) {
        if (i[a]) return i[a];
        var b = function() {};
        b.prototype = g;
        var c = new b;
        return c.getPluginName = function() {
            return a
        },
        i[a] = c,
        c
    },
    k = void 0,
    l = -1,
    m = 0,
    n = b.taskQueue = {
        queue: [],
        waiting: 0,
        onLoad: function() {
            var a = n,
            b = -1,
            c = a.queue[a.waiting],
            e = function() {
                0 !== b && (a.waiting++, clearTimeout(b), setTimeout(a.onLoad))
            };
            if (c) {
                if (a.queue[a.waiting] = m, c === l || !c.Def || !d.iF(c.Def)) return e();
                if (b = setTimeout(function() {
                    e(),
                    b = 0
                },
                2e3), c.Def.length) try {
                    c.Def(e)
                } catch(f) {} else {
                    try {
                        c.Def()
                    } catch(f) {}
                    e()
                }
            }
        },
        attachPlugin: function(a, b) {
            var c = o(a),
            e = d.Env.mods[b],
            f = d.require(e.name);
            return e.fn({
                require: c
            },
            f, d._ns(e.name)),
            e.status = 4,
            f
        },
        loadByName: function(a, b) {
            var c = this,
            e = "tkapi-plugin-" + b;
            d._lM({
                name: e
            },
            function() {
                var d = c.attachPlugin(b, e);
                a(d)
            })
        },
        loadByDeclare: function(a, b) {
            var c = this,
            e = "tkapi-plugin-" + b.name;
            d.declare(e, [], b.declare);
            var f = c.attachPlugin(b.name, e);
            a(f),
            console.log("new declare", e)
        },
        loadByUrl: function(a, b) {
            var c = this,
            e = "tkapi-plugin-" + b.name;
            d.getScript(b.url,
            function() {
                var d = c.attachPlugin(b.name, e);
                a(d)
            }),
            console.log("new Url", b)
        },
        addTask: function(a, b) {
            var c = this,
            d = 0,
            e = c.queue.push(k) - 1,
            f = function(a) {
                clearTimeout(d),
                c.queue[e] = void 0 === a ? l: a,
                c.onLoad()
            };
            d = setTimeout(f, 1e4),
            b ? b(f, a.name) : a.declare ? c.loadByDeclare(f, a) : a.url ? c.loadByUrl(f, a) : a.name && c.loadByName(f, a.name)
        }
    },
    o = b.requireFor = function(a) {
        return function(b) {
            return "tkapi-plugin-api" == b ? j(a) : d.require(b)
        }
    };
    b.Def = function(a) {
        if (n.queue = [], n.waiting = 0, a && d.iA(a) && a.length) for (var b, c = 0; c < a.length; c++) b = a[c],
        n.addTask(b)
    }
});